//长度最小的子数组
/*给定一个含有 n 个正整数的数组和一个正整数 target 。

找出该数组中满足其总和大于等于 target 的长度最小的 子数组 [numsl, numsl+1, ..., numsr-1, numsr] ，并返回其长度。如果不存在符合条件的子数组，返回 0 。
1 <= target <= 109
1 <= nums.length <= 105
1 <= nums[i] <= 104
*/
class Solution {
public:
    int minSubArrayLen(int target, vector<int>& nums) {
        int left = 0;
        int right = 0;
        int n = nums.size();
        int sum = 0;
        int ret = INT_MAX;
        while (right < n) {
            sum += nums[right];
            while (sum >= target) {
                ret = min(ret, right - left + 1);
                sum -= nums[left++];
            };
            right++;
        }
        return ret == INT_MAX ? 0 : ret;
    }
};
